package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import business.Utilisateur;
import business.utilities.Ami_Package;

import com.cedarsoftware.util.io.JsonWriter;

import dao.DaoAmitie;


public class S_FriendAction extends HttpServlet {
	private static final long serialVersionUID = 1L;


	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("json");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		
		String action = request.getParameter("action");
		Utilisateur utilisateur = (Utilisateur) request.getSession().getAttribute("utilisateur");
		
		// Renvoi des demandes d'ami non répondues.
		if(action == null || action.equals("")) {
			List<Ami_Package> json = new ArrayList<Ami_Package>();
			
			List<Utilisateur> demandeurs = DaoAmitie.getDemandesAmiRecues(utilisateur.getId_utilisateur());
			if(demandeurs != null && !demandeurs.isEmpty()) {
				for(Utilisateur d : demandeurs) {
					Ami_Package ap = new Ami_Package();
					ap.update(utilisateur, d);
					json.add(ap);
				}
			}
			
			List<Utilisateur> cibles = DaoAmitie.getDemandesAmiFaites(utilisateur.getId_utilisateur());
			if(cibles != null && !cibles.isEmpty()) {
				for(Utilisateur c : cibles) {
					Ami_Package ap = new Ami_Package();
					ap.update(utilisateur, c);
					json.add(ap);
				}
			}
			
			if(!json.isEmpty())
				out.print(JsonWriter.objectToJson(json));
			else
				out.print("{}");
		}
		else {
			int id_ami = Integer.valueOf(request.getParameter("id_ami"));
			
			// Nouvelle demande d'ami.
			if(action.equals("ajouter")) {
				if(DaoAmitie.demanderAmi(utilisateur.getId_utilisateur(), id_ami))
					out.print("{}");
				else
					response.setStatus(599);
			}
			// Accepter une demande d'ami.
			else if(action.equals("accepter")) {
				if(DaoAmitie.accepterAmi(utilisateur.getId_utilisateur(), id_ami))
					out.print("{}");
				else
					response.setStatus(598);
			}
			// Refuser une demande d'ami.
			else if(action.equals("refuser")) {
				if(DaoAmitie.refuserAmi(utilisateur.getId_utilisateur(), id_ami))
					out.print("{}");
				else
					response.setStatus(597);
			}
			// Supprimer un ami.
			else if(action.equals("supprimer")) {
				if(DaoAmitie.supprimerAmi(utilisateur.getId_utilisateur(), id_ami))
					out.print("{}");
				else
					response.setStatus(596);
			}
		}
		
		out.close();
	}
}